import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

class Score {
    public ArrayList<Integer> scores;
}

class Student {
    // 1. 这个类里的属性务必是 public 或者有 getter, setter 方法,
    //    否则 jackson 无法访问这个对象的属性.
    // 2. 这个类务必要有无参的构造方法.
    public int studentId;
    public String studentName;
    public Score score;
}

@WebServlet("/json")
public class JsonServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 此处假设请求的 body 格式为: { "studentId": 10, "studentName": "张三" }
        // jackson 提供的核心的类 ObjectMapper 有两个方法:
        // 一个是 readValue, 把json格式的数据转为 java 对象.
        // 一个是 writeValueAsString, 把java对象转为json格式的字符串.
        ObjectMapper objectMapper = new ObjectMapper();
        // readValue 第一个参数可以是输入流,也可以是字符串.
        // 第二个参数,是一个类对象.也就是要解析出结果的对象的类.
        Student s = objectMapper.readValue(req.getInputStream(),Student.class);
        System.out.println(s.studentId);
        System.out.println(s.studentName);
//
//        resp.setContentType("text/html; charset=utf8");
//        resp.getWriter().write(s.studentId + " " + s.studentName);

        resp.setContentType("application/json; charset=utf8");
        resp.getWriter().write(objectMapper.writeValueAsString(s));
        objectMapper.writeValue(resp.getWriter(),s);
    }
}
